package com.study.common.jackson;

import com.fasterxml.jackson.core.JsonParser;
import com.fasterxml.jackson.core.JsonToken;
import com.fasterxml.jackson.databind.DeserializationContext;
import com.fasterxml.jackson.databind.JsonDeserializer;

import java.io.IOException;
import java.util.List;

public class StringOrArrayDeserializer extends JsonDeserializer<String> {
    @Override
    public String deserialize(JsonParser p, DeserializationContext ctxt) throws IOException {
        JsonToken currentToken = p.getCurrentToken();

        // 如果是字符串，正常解析
        if (currentToken == JsonToken.VALUE_STRING) {
            return p.getValueAsString();
        }

        // 如果是数组
        if (currentToken == JsonToken.START_ARRAY) {
            List<?> list = p.readValueAs(List.class);
            if (list.isEmpty()) {
                return ""; // 空数组 → 空字符串
            } else {
                // 非空数组 → 返回第一个元素（或者 join 成字符串，看你需求）
                Object first = list.get(0);
                return first != null ? first.toString() : "";
            }
        }

        // 其他情况（null、数字等）兜底处理
        return p.getValueAsString();
    }
}

